#pragma once
/**
 * @file wawo_ppg_sensor.h
 * @author James Wang (woodsking2@hotmail.com)
 * @brief
 * @version 0.1
 * @date 2020-05-19
 *
 * Copyright (c) 2020 Walnutin Technology Company Limited. All Rights Reserved.
 *
 */
#if defined(__cplusplus)
extern "C"
{
#endif
#include "stdint.h"
#include "stdbool.h"

    /**
     * @brief 
     *
     */
    typedef enum __Heart_rate_type
    {
        Heart_rate_type_heart_rate = 0x1,
        Heart_rate_type_spo2 = 0x2,
    } Heart_rate_type;

    /**
     * @brief
     *        首次使用初始化函数
     *
     * @param null
     */
    void wawo_ppg_measure_init(void);

    /**
     * @brief
     *        任何线程中断都可能调用，实现里需要加上线程安全
     *
     * @param type 按位表示 Heart_rate_type_heart_rate|Heart_rate_type_ppg
     */
    void wawo_ppg_measure_start(Heart_rate_type type);

    /**
     * @brief 任何线程中断都可能调用，实现里需要加上线程安全
     *
     * @param type 按位表示 Heart_rate_type_heart_rate|Heart_rate_type_ppg
     */
    void wawo_ppg_measure_stop(Heart_rate_type type);

    /**
     * @brief 在主循环里调用, 比较费时间的操作放在这里面
     *
     */
    void wawo_ppg_measure_process(void);
    /**
     * @brief 未开启测量时，返回上一次值
     *        任何线程中断都可能调用，实现里需要加上线程安全
     *
     * @return uint8_t 40 <= value <= 220 为有效值，其他值为错误值
     */
    uint8_t wawo_ppg_measure_get_heart_rate(void);

    /**
     * @brief 未开启测量时，返回上一次值
     *        任何线程中断都可能调用，实现里需要加上线程安全
     *
     * @return uint8_t
     */
    uint8_t wawo_ppg_measure_get_spo2(void);
    /**
     * @brief
     *        任何线程中断都可能调用，实现里需要加上线程安全
     *
     * @return true
     * @return false
     */
    bool wawo_ppg_measure_is_wear(void);

#define WAWO_PPG_SENSOR_INVALID_ID (0xffffffff)
    /**
     * @brief 返回传感器id
     *        任何线程中断都可能调用，实现里需要加上线程安全
     *
     * @return uint32_t WAWO_PPG_SENSOR_INVALID_ID 通讯不上
     */
    uint32_t wawo_ppg_measure_get_id(void);
#if defined(__cplusplus)
}
#endif
